【CDI】データの値によって動的に複数のS3ファイルを作成し、振り分けて出力させてみた

【CDI】データの値によって動的に複数のS3ファイルを作成し、振り分けて出力させてみた

インフォマティカIDMC(CDI)でディストリビューションカラムという機能を使用して、カラムの値に基づいてファイルを動的にS3に振り分け出力させました。
Clock Icon2024.09.24

はじめに

こんにちは、データ事業本部の渡部です。
今回はInformaticaのCloud Data Integrationで、S3のディストリビューションカラムという機能を使用して、S3に対してカラム値にもとづく動的にファイル出力させてみました。

注意点としては、現状振り分けに使用するデータのカラムはS3に出力させなければなりません
マッピング上で振り分け用にカラムを作成したとしても、そのカラムをファイルに出力させなければエラーとなってしまいます。

検証マッピング

検証用にS3からS3への簡単なマッピングを使用します。

base_mapping

ディストリビューションカラム

ディストリビューションカラムにフィールドを設定すると、そのフィールドの値ごとに複数ファイルが作成され、フィールド値をもとにレコードが対象ファイルに振り分けられます。

ファイル名は以下のようになります。

  • <ターゲットファイル名>+_+<ディストリビューションカラムの値>+<ファイル拡張子>
    例:target_aaa.csv

ターゲットの形式オプションからディストリビューションカラムは設定可能です。
今回はターゲットオブジェクトはtarget.csv、ディストリビューションカラムをageとしました。

target-01

target-02

Informaticaの公式ドキュメントはこちらです。
https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/amazon-s3-v2-connector/amazon-s3-v2-sources-and-targets/amazon-s3-v2-targets/distribution-column.html

注意点

  • オブジェクトタイプがFlatのみ(CSVやTSVなど)使用可能で、ParquetやAvroなど他のファイル形式は使用できません。
  • ディストリビューションカラムは1つしか設定できません。
  • 前述のとおりカラムに指定したフィールドはターゲットで出力フィールドである必要があります。
    もしも出力フィールドとして指定していない場合、以下のようなエラーが発生します。
[ERROR] DistributionColumn Name: age provided is not present in Target field list. Provide a valid/mapped target field.

実行してみた

今回使用するS3のソースファイルは以下のとおりです。
ディストリビューションカラムであるageは16,51,67の3種類の値を持ちます。

id name age address
1 Yamazaki Kana 16 41-20-3 Shimo-Yoshiha
2 Suzuki Yui 51 4-1-13 Shibancho
3 Kobayashi Taichi 16 20-9-13 Marunouchi
4 Yamashita Yosuke 51 9-5-5 Yumiyama
5 Ito Akemi 67 23-22-16 Nishikanda
6 Kato Yumiko 51
7 Yamamoto Yui 16 33-18-6 Misugi
8 Takahashi Sotarou 51 36-2-12 Katsudoki

実行してみるとターゲットのS3には3ファイル出力されました。

target_output

データの中身もディストリビューションカラムに設定したageに基づいてデータが振り分けられていることが確認できました。

target_16.csv
"id","name","age","address"
"1","Yamazaki Kana","16","41-20-3 Shimo-Yoshiha"
"3","Kobayashi Taichi","16","20-9-13 Marunouchi"
"7","Yamamoto Yui","16","33-18-6 Misugi"
target_51.csv
"id","name","age","address"
"2","Suzuki Yui","51","4-1-13 Shibancho"
"4","Yamashita Yosuke","51","9-5-5 Yumiyama"
"6","Kato Yumiko","51",""
"8","Takahashi Sotarou","51","36-2-12 Katsudoki"
target_67.csv
"id","name","age","address"
"5","Ito Akemi","67","23-22-16 Nishikanda"

まとめ

以上、ディストリビューションカラムのご紹介でした。
データによってファイルを振り分けたいという要望はそこそこ出てくるため、そのような場合に使用していけるかと思います。

ターゲットがSecureAgentサーバーにファイルを出力させるフラットファイル出力であれば、振り分けに使用するカラムを出力させないようにすることがアップデートで可能になったのですが、S3はまだ対応されていません。
アップデートを待ちたいと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.